// 如果一组属性应该出现在每一个实例上，那我们就可以重用它们——尤其是对于方法getValue。
// 简单实现
// const boxes = [
//   { value: 1, getValue() { return this.value; } },
//   { value: 2, getValue() { return this.value; } },
//   { value: 3, getValue() { return this.value; } },
// ];


// 优化1：手动创建 将getVlaue移动到原型上, 所有盒子的 getValue 方法都会引用相同的函数，降低了内存使用率.
// const boxPrototype = {
//   getValue() {
//     return this.value;
//   },
// };
// const boxes = [
//   { value: 1, __proto__: boxPrototype },
//   { value: 2, __proto__: boxPrototype },
//   { value: 3, __proto__: boxPrototype },
// ];


// // 优化2：构造函数创建，它会自动为每个构造的对象设置 __proto__
// function Box(value) {
//   this.value = value;
// }
// Box.prototype.getValue = function () {
//   return this.value;
// };
// const boxes = [new Box(1), new Box(2), new Box(3)];
// // 获取实例的原型
// Object.getPrototypeOf(new Box()) === Box.prototype // true
// // 构造函数的原型(prototype)有constructor 指向构造函数自身
// Box.prototype.constructor === Box // true


// 优化3：使用类来创建
class Box {
  constructor(value) {
    this.value = value;
  }
  getValue() { // 在 Box.prototype 上创建方法
    return this.value;
  }
}



